#include <cstdio>
#include <algorithm>
#include <cstring>
typedef long long ll;
using namespace std;
const int N=100005;
int t,n,q;
int tree[33*N][2];
ll val[33*N];
int cnt;
void init(){
    memset(tree,0,sizeof(tree));
    memset(val,0,sizeof(val));
    cnt=0;
}
void insert(ll x){
    int root=0;
    for(int i=32;i>=0;i--){
        //从高位
        int id=(x>>i)&1;
        if(!tree[root][id]){
            tree[root][id]=++cnt;
        }
        root=tree[root][id];
    }
    val[root]=x;
}
ll query(ll x){
    int root=0;
    for(int i=32;i>=0;i--){
        int id=(x>>i)&1;
        //不管这一位(id)是1还是0，优先找与这一位不同的节点
        //这样异或值就会尽量大
        if(tree[root][id^1]){
            root=tree[root][id^1];
        }
        else{
            root=tree[root][id];
        }
    }
    return val[root];
}
int main(void){
    while(~scanf("%d",&t)){
        int c=1;
        while(t--){
            //printf("%d\n",t);
            init();
            long long tmp;
            long long que;
            scanf("%d%d",&n,&q);
            for(int i=0;i<n;i++){
                scanf("%lld",&tmp);
                insert(tmp);
            }
            printf("Case #%d:\n",c++);
            for(int i=0;i<q;i++){
                scanf("%lld",&que);
                ll ans=query(que);
                printf("%lld\n",ans);
            }
            //printf("zheli\n");
        }
    }
    return 0;
}